Discovering and diagnosing non-functional memory use defects in software services is a major challenge facing developers. Memory leaks or poor memory utilization scenarios may only be seen infrequently or once a service is in production and, as users are actively using the service, it can be virtually impossible to halt the service to attach a debugger. This makes it very difficult to resolve underlying issues and instead these issues are often worked around indirectly, for example, where memory leaks are solved by rebooting servers.